#pragma once

#include "common.h"
#include <mysqlx/xdevapi.h>

namespace TakeAwayPlatform
{

    class DatabaseHandler 
    {
    public:
        DatabaseHandler(const DBConfig& config);

        Json::Value query(const std::string& sql);

        bool is_connected() const;

        void reconnect();

        // 新增方法：执行更新操作（INSERT、UPDATE、DELETE）
        bool update(const std::string& sql);

        // 新增方法：执行事务操作
        bool transaction(const std::vector<std::string>& sqls);

        //获取最后一次插入操作的自增ID。
        int getLastInsertId();

        
    private:
        void connect(const DBConfig& config);

        Json::Value parse_result(mysqlx::SqlResult& result);


    private:
        DBConfig dbConfig;
        std::unique_ptr<mysqlx::Session> session;
    };

}